﻿
using System.Collections.Generic;
using System;
using System.Linq;
using System.ComponentModel;
using Grishko.DataTier;

using Grishko.DataTier.SqlSentence;

namespace OutdoorLib.BaseEntity.Infrastructure
{
    public interface ITimePeriodFilter
    {
        DateTime dtStart { get; set; }
        DateTime dtFinish { get; set; }
    }

    public class Filter:EntitySingle ,ICloneable 
    {
        /// <summary>
        /// категория - к какому спсику привязан фильтр (сотрудники, контракты и т.д.)
        /// </summary>
        public enum ListEntityType { None, EmployeeList, ConstractionList, ConstractionSheduleFilter };
        public enum ListEntityCategory { Provider, User, Client };

        public ScriptEngine Where { get; set; }

        public override string ID // перегружен только чтобы удалить SrchItemInfo
        {
            get
            {
                return base.ID;
            }
            set
            {
                base.ID = value;
            }
        }

        public string Caption { get; set; }

        /// <summary>
        /// Дополнительные условия
        /// </summary>
        Grishko.DataTier.SqlSentence.ScriptEngine.TMandatoryConditions MandatoryConditions { get { return Where.MandatoryConditions; } }

        public string Describe { get; set; }

        /// <summary>
        /// Категория (фильтр провайдера,пользователя, агентсва)
        /// </summary>
        ListEntityCategory _ListCategory = ListEntityCategory.User;
        /// <summary>
        /// Категория (фильтр провайдера,пользователя, агентсва)
        /// </summary>
        public ListEntityCategory ListCategory { get { return _ListCategory; } set { _ListCategory = value; } }

        /// <summary>
        /// ключ странички реждактирования - элемента списка 
        /// </summary>
        public virtual string ObjectPageKey { get { return string.Empty; } }

        /// <summary>
        /// ключ странички реждактирования - элемента списка 
        /// </summary>
        public virtual string ObjectTagName { get { return string.Empty; } }

        /// <summary>
        /// дополнительная обработка URL - вставка нового элемента в список
        /// - позволяет измениь созданный url - вставка элемента в соответсвии со спецификой фильтра
        /// </summary>
        /// <param name="sURl"></param>
        /// <returns></returns>
        public virtual string AddUrlHandler_Insert(string sURl)
        {
            return sURl;
        }

        /// <summary>
        /// дополнительная обработка URL - редактирование нового элемента в список
        /// - позволяет измениь созданный url - вставка элемента в соответсвии со спецификой фильтра
        /// </summary>
        /// <param name="sURl"></param>
        /// <returns></returns>
        public virtual string AddUrlHandler_Edit(string sURl)
        {
            return sURl;
        }

        public virtual List <EntitySingle> GetCollection()
        {
            ObjectWhere_EntityList l = new ObjectWhere_EntityList();
            l.ListWhere = Where;
            l.Load();
            return l.ToList <EntitySingle >();

        }

        #region Члены ICloneable

        public object Clone()
        {
            string s = this.ToXml(true);
            Filter  copy = (Filter )Entity.CreateInstance(s);
            copy.ReadXml(s);
            return copy;

        }
        

        #endregion
    }
    public class FilterList : EntityList
    {

    }

}
